#pragma once

#include <vector>
#include <string>
#include <memory>
#include "vkinfer/core/tensor.h"

namespace vkinfer
{
    enum class BlobTransferDirection
    {
        BLOB_TRANSFER_NONE,
        BLOB_TRANSFER_SRC,
        BLOB_TRANSFER_DST,
    };

    struct Blob
    {
        std::string name;
        std::vector<uint32_t> shape;

        virtual void copy_from(const std::shared_ptr<Tensor<float>>& tensor) = 0;
        virtual void copy_from(const std::vector<float>& data) = 0;
        virtual void copy_from(const float* data, const std::vector<uint32_t>& shape) = 0;
        virtual void copy_to(std::vector<float>& data) = 0;
        virtual void resize(const std::vector<uint32_t>& shape) = 0;
    };
}
